當你用 MedusaJS 建立好電商後端(API + Admin UI + 核心邏輯),下一步就是把它打包成 production-ready 的版本,部署到真正的伺服器環境。這篇文章會帶你從打包、部署前置準備,到一些注意事項,讓你能順利上線。
下面流程可分為三階段:
Medusa 提供了一個 CLI 指令 medusa build,其作用是將整個專案(包含後端程式與 Admin UI)編譯成可直接部署的版本,不再依賴原始的 TypeScript 檔案。
打包後產生一個目錄 .medusa(或依選項分割),裡面會包含:
.medusa/server:後端服務的 production build.medusa/server/public/admin:Admin UI 的前端靜態資產⚠️ 注意:這個
.medusa目錄 不應該被提交到版本控制系統(如 Git)中。因為每次 build 都會重建。
在專案根目錄下執行:
npx medusa build
這會同時打包後端與 Admin UI。
如果你希望 只打包 Admin UI(例如前端部署在 Vercel 或類似服務),可以加上 --admin-only:
npx medusa build --admin-only
這樣 Admin UI 的 build 檔案會輸出到 .medusa/admin 目錄(而不是一起在 .medusa/server/public/admin)docs.medusajs.com
打包完成後,要在本地(或預備環境)啟動確認沒問題,流程如下:
切換到 .medusa/server 目錄
安裝相依套件(因為 build 完後該目錄內可能需要 node_modules)
設定環境變數(從原本根目錄的 .env 複製或使用系統環境變數)
啟動應用(以 production 模式)
具體操作例子:
cd .medusa/server
npm install # 或 yarn / pnpm
cp ../../.env .env.production # 或相應複製方式
export NODE_ENV=production
npm start # 或 yarn start / pnpm start
注意:在 production / staging 環境下,Medusa 對 cookie 的同源、安全性設定比較嚴格。若你在本地或開發環境用 production 模式登入 Admin,有可能無法用 cookie 認證。docs.medusajs.com
為了解決這個問題,可以在 medusa-config.ts 中臨時調整 projectConfig.cookieOptions,例如設定 sameSite: "lax"、secure: false,來放寬 cookie 限制以便在本地測試。調整後要重新 build 並啟動。docs.medusajs.com
提醒:這樣的 cookie 設定 絕對不要 用在正式環境,否則會有安全風險。記得上線前要移除或恢復嚴格設定。docs.medusajs.com
Medusa 本身比較彈性,能部署在很多環境/平台上:
在部署前,需要考慮以下幾點:
| 項目 | 為什麼要檢查 | 建議操作 |
|---|---|---|
| 環境變數是否正確 | 錯誤的 API 金鑰、資料庫連線會導致錯誤 | 用 .env.production 或平台環境設定設定好 |
| SSL / HTTPS | 保護資料安全 | 強制 HTTP → HTTPS 重導向 |
| Cookie / 同源設定 | 確保登入與認證正確 | 在 projectConfig.cookieOptions 中設定 sameSite, secure 等 |
| 日誌與錯誤追蹤 | 監控上線後系統狀態 | 整合 Sentry / 日誌工具 / 指標儀表板 |
| 資源存取權限 | 防止外部讀寫敏感檔案 | 僅開放必要目錄、設定正確權限 |
| CORS / API 安全 | 防止惡意跨域請求 | 設定合理的 CORS 白名單、Header 驗證 |
| 資料庫遷移 / 版本一致性 | 保證資料庫 schema 與程式匹配 | 部署時先 migrate / run migrations |
| 測試上線流程 | 確保上線沒有重大錯誤 | 在 staging 做完整流程測試(下單、付款、後台) |
若你打算不斷改寫後端與 UI,記得在每次改動後再 run medusa build 並重新部署整個 build 內容
使用版本控制與 CI/CD 自動化打包流程,可減少人工錯誤
對核心功能(下單、付款流程、API)寫測試(integration tests)保障功能正確性
監控效能與資源(CPU、記憶體、資料庫查詢慢查詢等)
用 MedusaJS 打包與上線,表面看起來流程簡單(npx medusa build、部署、啟動),但實務上要把環境變數、cookie 安全、前後端搭配、資源管理、錯誤追蹤都顧好,才能讓系統真正穩定運行。
今天也是最後一天,這次也是我第一次參賽,雖然中間感冒睡死直接忘記上傳睡死一天。但是這次也是一個很寶貴的經驗,也讓我知道寫一篇好的文章也並不是提前幾天寫謝就好,寫到後面會發現時間根本不夠,想好的架構只好背離,如果明年還有機會參賽,一定會提前幾個月準備準備好..........